
import java.io.*;
import java.nio.file.*;

public class Test {
    public static void main(String[] args) throws IOException {
        // 1、File对象既可以表示文件，也可以表示目录
        // 注意Windows平台使用\作为路径分隔符，在Java字符串中需要用\\表示一个\。Linux平台使用/作为路径分隔符：
        File f = new File("./1.txt");
        System.out.println(f);
        System.out.println("构造方法传入的路径: " + f.getPath());
        System.out.println("绝对路径 " + f.getAbsolutePath());
        System.out.println("绝对路径类似，但是返回的是规范路径 " + f.getCanonicalPath());
        // 绝对路径可以表示成C:\Windows\System32\..\notepad.exe，而规范路径就是把.和..转换成标准的绝对路径后的路径：C:\Windows\notepad.exe。

        // 2、fiel对象的常用方法
        System.out.println("file对象是否为文件 " + f.isFile());
        System.out.println("file对象是否是目录 " + f.isDirectory());
        System.out.println("文件或目录是否存在 " + f.exists());
        System.out.println("文件是否可读 " + f.canRead());
        System.out.println("文件是否可写 " + f.canWrite());
        System.out.println("文件是否可执行 " + f.canExecute());
        System.out.println("文件的长度 " + f.length() + " 字节");

        // 3、创建和删除文件
        File f2 = new File("./test.txt");
        if (!f2.exists()) {
            boolean created = f2.createNewFile();
            System.out.println("文件创建成功: " + created);
        } else {
            boolean deleted = f2.delete();
            System.out.println("文件删除成功: " + deleted);
        }

        // 4、createTempFile()来创建一个临时文件，以及deleteOnExit()
        File tempFile = File.createTempFile("myapp-", ".txt");
        System.out.println("临时文件路径: " + tempFile.getAbsolutePath());
        f.deleteOnExit(); // JVM退出时自动删除

        // 5、遍历文件和目录
        File dir = new File("./");
        String[] names = dir.list(); // 获取当前目录下的所有文件和目录名（String）
        System.out.println("当前目录下的文件和目录:");
        for (String name : names) {
            System.out.println(" - " + name);
        }
        // listFiles
        File[] files = dir.listFiles(); // 获取当前目录下的所有文件和目录对象(完整 File 对象)
        System.out.println("当前目录下的文件和目录(File对象):");
        for (File file : files) {
            System.out.println(" - " + file.getName());
        }
        System.out.println("--------------");
        // 6、Java标准库还提供了一个Path对象，它位于java.nio.file包。Path对象和File对象类似，但操作更加简单：
        Path p1 = Paths.get(".", "project", "study"); // 构造一个Path对象
        System.out.println(p1);
        Path p2 = p1.toAbsolutePath(); // 转换为绝对路径
        System.out.println("转换为绝对路径 " + p2);
        Path p3 = p2.normalize(); // 转换为规范路径
        System.out.println("转换为规范路径 " + p3);
        File f3 = p3.toFile(); // 转换为File对象
        System.out.println(f3);
        for (Path p : Paths.get("..").toAbsolutePath()) { // 可以直接遍历Path
            System.out.println("  " + p);
        }
    }
}
